package com.monitor;

import com.monitor.security.RegistrationManager;
import com.monitor.security.ScreenCaptureManager;
import com.monitor.security.DeviceUsageManager;
import com.monitor.service.BrowserMonitorService;
import com.monitor.ui.RegistrationDialog;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

import java.io.IOException;

/**
 * 应用程序主类，使用JavaFX框架实现
 */
public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        try {
            // 检查注册状态
            RegistrationManager registrationManager = new RegistrationManager();
            if (!registrationManager.isRegistered()) {
                // 如果未注册，显示注册对话框
                showRegistrationDialog(primaryStage, registrationManager);
            } else {
                // 已注册，直接显示主界面
                showDashboard(primaryStage);
                
                // 启动屏幕截图服务、设备使用记录上传服务和浏览器监控服务
                try {
                    Long deviceId = Long.parseLong(registrationManager.getDeviceId());
                    ScreenCaptureManager.startScreenCaptureService(deviceId);
                    DeviceUsageManager.startDeviceUsageService(deviceId);
                    
                    // 启动浏览器监控服务
                    BrowserMonitorService browserMonitorService = BrowserMonitorService.getInstance();
                    browserMonitorService.startMonitoring();
                    
                    System.out.println("所有服务已启动，设备ID: " + deviceId);
                } catch (Exception e) {
                    System.err.println("启动服务失败: " + e.getMessage());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 显示注册对话框
     * 
     * @param primaryStage 主舞台
     * @param registrationManager 注册管理器
     */
    private void showRegistrationDialog(Stage primaryStage, RegistrationManager registrationManager) {
        try {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/RegistrationDialog.fxml"));
            Parent root = loader.load();
            
            // 获取控制器并设置参数
            com.monitor.ui.controller.RegistrationDialogController controller = loader.getController();
            controller.setRegistrationManager(registrationManager);
            controller.setPrimaryStage(primaryStage);
            
            // 创建场景
            Scene scene = new Scene(root);
            scene.getStylesheets().add(getClass().getResource("/css/style.css").toExternalForm());
            
            // 配置对话框舞台
            Stage dialog = new Stage();
            dialog.setTitle("系统注册");
            dialog.setScene(scene);
            dialog.setResizable(false);
            
            // 设置应用图标
            try {
                dialog.getIcons().add(new Image(getClass().getResourceAsStream("/images/app_icon.png")));
            } catch (Exception e) {
                System.err.println("加载应用图标失败: " + e.getMessage());
            }
            
            // 显示对话框并等待结果
            dialog.showAndWait();
            
            // 检查注册结果
            if (registrationManager.isRegistered()) {
                showDashboard(primaryStage);
            } else {
                // 用户取消注册，退出程序
                Platform.exit();
            }
        } catch (IOException e) {
            e.printStackTrace();
            Platform.exit();
        }
    }

    /**
     * 显示主界面
     * 
     * @param primaryStage 主舞台
     */
    private void showDashboard(Stage primaryStage) {
        try {
            // 加载FXML
            Parent root = FXMLLoader.load(getClass().getResource("/fxml/DashBoard.fxml"));
            
            // 创建场景
            Scene scene = new Scene(root, 800, 600);
            scene.getStylesheets().add(getClass().getResource("/css/style.css").toExternalForm());
            
            // 配置舞台
            primaryStage.setTitle("反黄专家系统");
            primaryStage.setScene(scene);
            primaryStage.setMinWidth(600);
            primaryStage.setMinHeight(400);
            
            // 设置应用图标
            try {
                primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/images/app_icon.png")));
            } catch (Exception e) {
                System.err.println("加载应用图标失败: " + e.getMessage());
            }
            
            // 显示舞台
            primaryStage.show();
            
            // 启动屏幕截图服务、设备使用记录上传服务和浏览器监控服务（确保在主界面显示后启动）
            try {
                RegistrationManager registrationManager = new RegistrationManager();
                if (registrationManager.isRegistered()) {
                    Long deviceId = Long.parseLong(registrationManager.getDeviceId());
                    
                    // 启动屏幕截图服务
                    ScreenCaptureManager.startScreenCaptureService(deviceId);
                    System.out.println("屏幕截图服务已启动，设备ID: " + deviceId);
                    
                    // 启动设备使用记录上传服务
                    DeviceUsageManager.startDeviceUsageService(deviceId);
                    System.out.println("设备使用记录上传服务已启动，设备ID: " + deviceId);
                    
                    // 启动浏览器监控服务
                    BrowserMonitorService browserMonitorService = BrowserMonitorService.getInstance();
                    browserMonitorService.startMonitoring();
                    System.out.println("浏览器监控服务已启动，设备ID: " + deviceId);
                }
            } catch (Exception e) {
                System.err.println("启动服务失败: " + e.getMessage());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 主方法
     * 
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        launch(args);
    }
}